/*Integrantes    Seccion 4
 * Rodriguez David
 * Camacaro Lisbeth
 * Gonzalez Manuel 
 * Pena Yanmary
 */

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.util.Vector;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class Principal {

	/**
	 * @param args
	 * @throws IOException 
	 */
	
	public static void main(String[] args) throws IOException {
		
		// TODO Auto-generated method stub
		Seccion s=new Seccion();
		
		Estudiante e= new Estudiante();
		
		Profesor p= new Profesor();
		
		Persona pe=new Persona();
		Metodos me=new Metodos();
		
		BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
		
		String tipo;
		String nombrep = null;
		long cedulap;
		String apellidop;
		String titulo;
		long ced;
		String nombre;
		String apellido;
		char estado;
		int numero = 0;
		int seguir;
		int op;
		
		int resp;
		int opc=0;
		
		
		
		
		
	    System.out.println("****************************************Bienvenidos al Sistema de Registro Academico******************************************************************");
	    System.out.println("******************************************************************************************************************************************************");
	    do {
			opc = 1;
			try {
				System.out.println("Ingrese el numero de Seccion: ");
				numero = Integer.parseInt(br2.readLine());
			} catch (NumberFormatException ex) {
				System.out.println("Valor incorrecto.");
				opc = 0;
			}
		} while (opc == 0);
			
		System.out.print("\n\tDesea asignar un profesor a la seccion?\t (1)-Si (2)-No\t");
		seguir=Integer.parseInt(br2.readLine());
		if(seguir==(1))
			
		{
			System.out.println("*********************************************DATOS DEL PROFESOR*********************************************************************************************************");
			System.out.print("\n\tNumero de Cedula:\t");
			cedulap=Long.parseLong(br2.readLine());
			System.out.print("\n\tNombre:\t");
			nombrep=br2.readLine();
			System.out.print("\n\tApellido:\t");
			apellidop=br2.readLine();
			System.out.print("\n\tTtulo:\t");
			titulo=br2.readLine();
			 p =new Profesor(cedulap, nombrep, apellidop,titulo);
			s.SetProfesor(p);
	      System.out.print("\n\tProfesor Asignado");
	      }
		
		
	      boolean continuar1=true;
		do{
			boolean continuar=true;
			
	      System.out.println("\tSeccion:"+numero+" \tProfesor:"+ ((nombrep!=null)? nombrep:"\tNo Asignado "));
	      System.out.println("\n**********************************************************Menu Principal************************************************************************************");
	      System.out.println("\n\t----Elige una opcion-----" ); 
    	  System.out.println("\t1.- Asignar Profesor" ); 
    	  System.out.println("\t2.- Procesar Estudiante" ); 
    	  System.out.println("\t3.- Aplicar Evaluacion");
    	  System.out.println("\t4.- Listar Estudiante");
    	  System.out.println("\t0.- Salir");
    	  op=Integer.parseInt(br2.readLine());
    	  switch(op)

{
    	  case(1):if(nombrep==null){System.out.print("\n\tNumero de Cedula:\t");
									cedulap=Long.parseLong(br2.readLine());
									System.out.print("\n\tNombre:\t");
									nombrep=br2.readLine();
									System.out.print("\n\tApellido:\t");
									apellidop=br2.readLine();
									System.out.print("\n\tTtulo:\t");
									titulo=br2.readLine();
									 p =new Profesor(cedulap, nombrep, apellidop,titulo);
									s.SetProfesor(p);
									System.out.println("\tProfesor Asignado");
    	  }
    	  else
    		  System.out.println("\t\tEl Profesor ya esta asignado");
	      break;
    		  
    		  
    		  
    	  case(2):
          do{
	     
        	  System.out.print("\n**********************************************************Operaciones del Estudiante*************************************************************************");
	    	  System.out.println("\n\t----Elige una opcion-----" ); 
	    	  System.out.println("\t1.- Inscribir a un Estudiante\t" ); 
	    	  System.out.println("\t2.- Buscar a un Estudiante\t" ); 
	    	  System.out.println("\t3.- Retirar a un Estudiante\t"); 
	    	  System.out.println("\t0.- Salir");
	    	  op=Integer.parseInt(br2.readLine());
	    	  
	    	  
	      
	    	  switch(op)
	    	 	  
	    	 { 
	    	  case(1): 
	    	
	    		  
	    		  
	    		  
	    		    System.out.print("\tNumero de Cedula:\t");  
	    	  ced=Long.parseLong(br2.readLine()); 
	    	  
	    	 
	    	  if((s.Buscar(ced))!=null)
	    	  {
				  
				  System.out.println("\n\tEl Estudiante ya Existe");
				  //continuar=true;
				  
	    	  }
	    	  else  
	    	  {
	    		  System.out.print("\n\tNombre:\t");  
		    	  nombre=br2.readLine();
		    	  System.out.print("\n\tApellido:\t");  
		    	  apellido=br2.readLine();
		    	  estado='\t';
				s.inscribirEstudiante(new Estudiante(ced,nombre,apellido,estado));
				 System.out.println("\n\tEstudiante Inscrito");
				 //continuar=false
	    	  }  	
	    	  	//}while(continuar);
	      
	    	  break;
	
	    	 
	    	  case(2):
	    		  
	    		  System.out.print("\n\tNumero de Cedula:\t");
	    	  	  ced=Long.parseLong(br2.readLine());
	    	  	 
	    	  	 if((e=s.Buscar(ced))!=null)
		    	  
	    	  		 
	    	  	 {    System.out.println("*******************************************************************DATOS DEL ESTUDIANTE ENCONTRADO**************************************************************");	  
	    	  		 System.out.print("\n\tNumero de Cedula:\t"+e.getCedula());
				  System.out.print("\n\tNombre:\t"+e.getNombre());
				  System.out.print("\n\tApellido:\t"+e.getApellido());
	    	  	 }
	    	  	 else
	    	  		 
	    	 {
				 System.out.println("\n\tEStudiante no encontrado");
			
			}
	     
	    		  
	    		  
	    	  break;
	    	  
	    	
	    	  case(3):
	    		  
	    		  System.out.print("\n\tNumero de Cedula:\t");
    	  	  ced=Long.parseLong(br2.readLine());
    	  	 
	    		  
	    		  if((e=s.Buscar(ced))!=null)
	   		    	  
		    	  	 {  s.RetirarEstudiante(ced);
		    	  	System.out.println("\n\tEstudiante Removido");
		    	  	 }
		    	  	 else
		    	  		 
		    	 {
					 System.out.print("\nEStudiante no encontrado");
					
				}
		      
		    	  break;
	    	  case(0): continuar=false;
	    	  break;
	    	  }
	      }while(continuar);
    	  break;
    	  case(3):
    		  
    		  Vector<Estudiante> estudiantes2 = s.OrdenarNota();
	  	  for(int i=0;i<estudiantes2.size();++i)
    		  
    		  if(s.Cantidad()==0)
    			  
    		  {
    			  System.out.print("No se puede aplicar ninunga evaluacion debido a que no existe ningun estudiante en la seccion");   			  
    		  }
    	  
    		  else
    		  
    		   if(p.getNombre()==null){
    			  
    			  System.out.print("No se puede aplicar ninunga evaluacion debido a que no esta asigando ningun profesor a la seccion");
    			 
    		  }
    		  else
    		  {
    			
    			  
    			  s.AplicarEvaluacion();  // revisar
    			
    			  System.out.print("\n\tEvaluacion Aplicada");
    			  // System.out.print("Estado"+estudiantes2.get(i).getNotafinal());
    			  
    		  }
    			  break;
    	
    	  case(4)://ListarEstudiante
    		
    		System.out.println("***********************************************************Reporte de Estudiantes**********************************************************************");  
    	  System.out.println("\n\t----Elige una opcion-----" ); 
    	  System.out.println("\t1.- Listado por notas" ); 
    	  System.out.println("\t2.- Listado por cedula" ); 
    	  System.out.println("\t3.- Listado por Estudiantes Aprobados"); 
    	  System.out.println("\t4.- Listado por Estudiantes Reprobados");
    	  System.out.println("\t5.- Mostrar Promedio de Notas");
    	  System.out.println("\t0.- Salir");
    	  op=Integer.parseInt(br2.readLine());
    	  
    	
    	  switch(op)
	 	  
    	  {
    	  case(1): 
    		  Vector<Estudiante> estudiantes = s.OrdenarNota();
		  	  
    	  System.out.println("*******************************************************************Listado por Notas**************************************************************");	  
			System.out.println("\nCedula:\t\t\tNombre:\t\t\t Nota1:\t\t\t Nota2:\t\t\t Nota3:\t\t\t Nota Final:");  
    	  
    	  for(int i=0;i<estudiantes.size();++i)
		  		  	  	    
		  			  		  	  	    
		  		if(s.Cantidad()!=0)
		  			{
		  			 
		  			
		  		System.out.println("\n\n"+estudiantes.get(i).getCedula()+"\t\t\t"+estudiantes.get(i).getNombre()+"\t\t\t"+estudiantes.get(i).getNota1()+"\t\t\t"+estudiantes.get(i).getNota2()+"t\t\t\t"+estudiantes.get(i).getNota3()+"\t\t\t"+estudiantes.get(i).getNotafinal()); 
		  			}
		  	  
		  		else
		  		{
		  			System.out.print("No se encuentra ningun estudiante");
		  		}
    	  s.ListadoNotas();
    	    break;
    	  case(2):
    		  
    		
    		  
    		  Vector<Estudiante> estudiantes1 = s.OrdenarCedula();
	  	  
    	  System.out.println("*******************************************************************DATOS DE ESTUDIANTES ORDENADOS POR CEDULA**************************************************************"); 
    	
    	  System.out.println("\n\nCedula:\t\t\t\tNombre:");
    	  for(int i=0;i<estudiantes1.size();++i)
		  		  	  	    
		  			  		  	  	    
		  		if(s.Cantidad()!=0)
		  			{
		  	
		  		System.out.println("\n\n"+estudiantes1.get(i).getCedula()+"\t\t\t\t"+estudiantes1.get(i).getNombre()); 
		  			}
		  	  
		  		else
		  		{
		  			System.out.print("No se encuentra ningun estudiante");
		  		}
    	    s.ListadoCedula();
    		break;
    		
    	  case(3):
    		  Vector<Estudiante> estudiantes11 = s.ListadodeEstudiantesAprobados(p);
	  	  
    	  System.out.println("********************************************************Listado de Estudiantes Aprobados****************************************************"); 
		  System.out.print("\n\nCedula:\t\t\t\tNombre:\t\t\t\tEstado:");
    	  for(int i=0;i<estudiantes11.size();++i)
    		  
    	   if((estudiantes11.get(i).getNotafinal()>=10) & (s.Cantidad()!=0))
    		   
    	   {
    		 
    		  System.out.println("\n\n"+estudiantes11.get(i).getCedula()+"\t\t\t\t"+estudiantes11.get(i).getNombre()+"\t\t\t\t"+estudiantes11.get(i).getEstado()); 
    		  
    	   }
	  		/* 
    	   else 
    		   
    		   System.out.print("No existe tal listado debido a que no se encuentra ningun estudainte registrado");
    	  */
	  	s.ListadoAprobado();
    	  break;
	  	
    	  case (4):
    		  Vector<Estudiante> estudiantes111 = s.ListadodeEstudiantesReprobados(p);
	  	  
    	  System.out.println("****************************************************Listado de Estudiantes Reprobados****************************************************"); 
 		  System.out.print("\n\nCedula:\t\t\t\tNombre:\t\t\t\tEstado:");
    	  for(int i=0;i<estudiantes111.size();++i)
    		  
    	   if((estudiantes111.get(i).getNotafinal()<10) & (s.Cantidad()!=0))
    		   
    	   {
    		   
     		  System.out.println("\n\n"+estudiantes111.get(i).getCedula()+"\t\t\t\t"+estudiantes111.get(i).getNombre()+"\t\t\t\t"+estudiantes111.get(i).getEstado()); 
    	   }
	  		  
    	   else 
    	   {
    	/*   {
    		   System.out.print("No existe tal listado debido a que no se encuentra ningun estudainte registrado");
    	  }*/}
    	  s.ListadoReprobado();
    		  break;
    		  
    	  case (5): // Revisar
    		  
    	   if(s.Cantidad()!=0)
    		   
    	   {
    		
    		System.out.print("El Promedio de la seccion es:"+s.Promedio());
    	   }
	  		  
    	   else 
    	   {
    		   System.out.print("No existe tal listado debido a que no se encuentra ningun estudainte registrado");
    	  }
    		  break;  
    	  case(6):continuar1=false;
    	  break;
}
}	  
		}while(continuar1);
		
		
	}
}	
		
		  	
	
	
	
	
		
	

	